home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_b / sdos.act < prev    next >
Text File  |  1995-04-22  |  3KB  |  207 lines

  1. ;sdos.act
  2. ;bill aycock, 9/89
  3. ;support for sparta parameter passing
  4. ;also: see the SDCS manual pp.108-111
  5.  
  6.  
  7. module
  8.  
  9.  
  10. ;--------------------------------------
  11. ;dummy routine for crunching args
  12. ;set to correct address in _setup()
  13. ;this routine gets one parameter from
  14. ; the cmd line and inserts a drive
  15. ; spec ("Dn:") in front
  16. ;returns the parameter in comfname
  17. ;
  18.  
  19. proc _zcr()
  20.  
  21.  
  22. ;--------------------------------------
  23. ;setup routine
  24. ;returns zero if sparta not installed
  25. ;else returns 1 and sets up _zcr() addr
  26. ;
  27.  
  28. byte func _setup()
  29.  byte sparta=$700
  30.  card dosvec=10
  31.  
  32.  if sparta#'S then return(0) fi
  33.  _zcr=dosvec+3
  34.  
  35. return(1)
  36.  
  37.  
  38. ;--------------------------------------
  39. ;find command line length
  40. ;returns length of command line
  41. ;
  42.  
  43. byte func _cmdlen()
  44.  card dosvec=10
  45.  byte pointer _cmdline
  46.  byte i
  47.  
  48.  _cmdline=dosvec+63
  49.  for i=0 to 63 do
  50.    if _cmdline^=155 then exit fi
  51.    _cmdline==+1
  52.  od
  53. return(i)
  54.  
  55.  
  56. ;--------------------------------------
  57. ;get entire command line
  58. ;pass addr of a 65-byte-long string
  59. ;returns entire cmd line in the string
  60. ;
  61.  
  62. proc _getcmds(byte array cmds)
  63.  card dosvec=10
  64.  byte pointer _cmdline
  65.  byte i,j
  66.  
  67.  _cmdline=dosvec+63
  68.  i=_cmdlen()
  69.  cmds^=i
  70.  for j=1 to i do
  71.    cmds(j)=_cmdline^
  72.    _cmdline==+1
  73.  od
  74. return
  75.  
  76.  
  77. ;--------------------------------------
  78. ;find how many parameters on cmd line
  79. ;returns number of parameters...
  80. ;
  81. ;     INCLUDING PROGRAM NAME!
  82. ;
  83.  
  84. byte func _howmany()
  85.  card dosvec=10
  86.  byte pointer _argbuf
  87.  byte pointer _bufoff
  88.  byte i,j
  89.  
  90.  _argbuf=dosvec+33
  91.  _bufoff=dosvec+10
  92.  
  93.  _bufoff^=0
  94.  i=_cmdlen()
  95.  j=0
  96.  while _bufoff^ < i do
  97.    _zcr()
  98.    j==+1
  99.  od
  100. return(j)
  101.  
  102.  
  103. ;--------------------------------------
  104. ;get default drive number
  105. ;returns ASCII VALUE of default drive
  106. ;
  107.  
  108. byte func _ddrive()
  109.  card dosvec=10
  110.  byte pointer _argbuf2
  111.  byte pointer _bufoff
  112.  byte i
  113.  
  114.  _argbuf2=dosvec+34 ;2nd char of buffer
  115.  _bufoff=dosvec+10
  116.  
  117.  _bufoff^=0
  118.  for i=1 to _howmany() do ;skip _all_!
  119.    _zcr()
  120.  od
  121.  _zcr()
  122. return(_argbuf2^)
  123.  
  124.  
  125. ;--------------------------------------
  126. ;get a specific parameter
  127. ;pass param number to get, and
  128. ;  addr of a 29-byte-long string
  129. ;returns desired param in the string
  130. ;NOTE: param #0 is program name!
  131. ;
  132.  
  133. proc _getparm(byte which
  134.               byte array parm)
  135.  card dosvec=10
  136.  byte pointer _argbuf
  137.  byte pointer _bufoff
  138.  byte i
  139.  
  140.  parm^=0
  141.  if which>(_howmany()-1) then return fi
  142.  
  143.  _argbuf=dosvec+33
  144.  _bufoff=dosvec+10
  145.  
  146.  _bufoff^=0
  147.  for i=1 to which do ;skip to desired
  148.    _zcr()            ;  parameter
  149.  od
  150.  
  151.  _zcr()
  152.  for i=1 to 28 do
  153.    if _argbuf^=155 then exit fi
  154.    parm(i)=_argbuf^
  155.    _argbuf==+1
  156.  od
  157.  parm^=i-1
  158. return
  159.  
  160.  
  161. ;--------------------------------------
  162. ;demo routine
  163. ;this demonstrates the above routines
  164. ;
  165. ;NOTE: you MUST call _setup() and get
  166. ;  a positive result before calling
  167. ;  any of the other routines here...
  168. ;  otherwise, it's crash city!
  169. ;
  170.  
  171. proc demo()
  172.  
  173.  byte array parameter(29)
  174.  byte array command(65)
  175.  byte i,j
  176.  
  177.  pute()
  178.  if _setup()=0 then
  179.    printe("SpartaDOS not installed!")
  180.    return
  181.  fi
  182.  
  183.  i=_cmdlen()
  184.  printf("command line is %B chars long%E%E",i)
  185.  
  186.  _getcmds(command)
  187.  printe("command line:")
  188.  printe(command)
  189.  pute()
  190.  
  191.  i=_ddrive()
  192.  printf("default drive is D%C:%E%E",i)
  193.  
  194.  i=_howmany()
  195.  printf("%B parameters were passed%E",i)
  196.  printf("(including parameter #0!)%E%E")
  197.  
  198.  printe("parameter number, value:")
  199.  for j=0 to i-1 do
  200.    _getparm(j,parameter)
  201.    printf(" %B  %S%E",j,parameter)
  202.  od
  203.  
  204. return
  205.  
  206. ;---- end of sdos.act -----------------
  207.